using MediatR;
using S.O.Domain.Dto.Output;
using S.O.ErrorCode;
using System.ComponentModel.DataAnnotations;

namespace S.O.Api.Read.Application.Command.Medical
{
    /// <summary>
    /// 获取处方列表查询命令
    /// 支持按患者ID、医生、处方类型等条件查询处方记录
    /// </summary>
    public class GetPrescriptionListCommand : IRequest<APIPaging<PrescriptionDto>>
    {
        /// <summary>
        /// 页码，默认为1
        /// </summary>
        [Range(1, int.MaxValue, ErrorMessage = "页码必须大于0")]
        public int PageIndex { get; set; } = 1;

        /// <summary>
        /// 页大小，默认为10
        /// </summary>
        [Range(1, 100, ErrorMessage = "页大小必须在1-100之间")]
        public int PageSize { get; set; } = 10;

        /// <summary>
        /// 患者ID（可选）
        /// </summary>
        public long? PatientId { get; set; }

        /// <summary>
        /// 患者姓名（可选，支持模糊查询）
        /// </summary>
        public string? PatientName { get; set; }

        /// <summary>
        /// 医生姓名（可选，支持模糊查询）
        /// </summary>
        public string? Doctor { get; set; }

        /// <summary>
        /// 处方类型（可选：中药、西药）
        /// </summary>
        public string? PrescriptionType { get; set; }

        /// <summary>
        /// 处方状态（可选：已开具、已审核、已发药、已完成）
        /// </summary>
        public string? Status { get; set; }

        /// <summary>
        /// 开始日期（可选）
        /// </summary>
        public DateTime? StartDate { get; set; }

        /// <summary>
        /// 结束日期（可选）
        /// </summary>
        public DateTime? EndDate { get; set; }
    }
}